// -----------------------------
// Author: 		Dhaenens Gert 
// Creation: 	4/29/2014 11:10:03 PM				
// -----------------------------

#ifndef _IEffectPass_h
#define _IEffectPass_h

#include "DxCommon.h"

namespace DxLib
{

	class IRenderDevice;
	class IInputLayout;
	class IVertexShader;
	class IGeometryShader;
	class IHullShader;
	class IDomainShader;
	class IPixelShader;

	class DXLIB IEffectPass
	{
	public:
		// Release the Interface
		virtual void	Release() = 0;

		// Apply the Pass
		virtual void	Apply() = 0;

		// Set the Input Layout
		virtual void	SetInputLayout(IInputLayout* lpInputLayout) = 0;
		// Set the Vertex Shader
		virtual void	SetVertexShader(IVertexShader* lpShader) = 0;
		// Set the Geometry Shader
		virtual void	SetGeometryShader(IGeometryShader* lpShader) = 0;
		// Set the Hull Shader
		virtual void	SetHullShader(IHullShader* lpShader) = 0;
		// Set the Domain Shader
		virtual void	SetDomainShader(IDomainShader* lpShader) = 0;
		// Set the Pixel Shader
		virtual void	SetPixelShader(IPixelShader* lpShader) = 0;

		// Get the Device
		virtual IRenderDevice*		GetDevice() const = 0;
		// Get the Input Layout
		virtual IInputLayout*		GetInputLayout() const = 0;
		// Get the Vertex Shader
		virtual IVertexShader*		GetVertexShader() const = 0;
		// Get the Geometry Shader
		virtual IGeometryShader*	GetGeometryShader() const = 0;
		// Get the Hull Shader
		virtual IHullShader*		GetHullShader() const = 0;
		// Get the Domain Shader
		virtual IDomainShader*		GetDomainShader() const = 0;
		// Get the Pixel Shader
		virtual IPixelShader*		GetPixelShader() const = 0;

	};

}

#endif